import axios from 'axios'
import { TodoActionType, RootThunkAction } from '..'

// 类型参数1： ReturnType 用于指定函数的返回值类型 void
// 类型参数2： 指定RootState的类型
// 类型参数3： 指定额外的参数类型，一般为unkonwn或者any
// 类型参数4： 用于指定dispatch的Action类型
export const getTodos = (): RootThunkAction => {
  // 发异步请求
  return async (dispatch) => {
    const res = await axios.get('https://www.fastmock.site/mock/37d3b9f13a48d528a9339fbed1b81bd5/book/api/todos')
    console.log(res)
    dispatch({
      type: 'todo/INIT_STATE',
      initState: res.data.data
    })
  }
}

export const updateState = (id: number): TodoActionType => {
  // return dispatch => {
  //     // ajax

  //     dispatch({
  //         type: 'xxxx',
  //         payload: id
  //     })
  // }

  return {
    type: 'todo/UPDATE_STATE',
    payload: id
  }
}

export const addTodo = (name: string) : TodoActionType => {
  return {
    type: 'todo/ADD_STATE',
    payload: {
      id: Date.now(),
      name,
      isDone: false
    }
  }
}

export const del = (id: number) : TodoActionType => {
  return {
    type: 'todo/DEL_STATE',
    id
  }
}
